package ar.edu.sccs.model.loader.dto;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class DataClazz implements Serializable {

	private static final long serialVersionUID = 1L;

	private DataSCM clazzRepository;
	private DataProject clazzProject;
	private String sourcePath;
	
	private String clazzPackage;
	private String clazzName;
	private Class clazzExtend;
	private List<Class> clazzImplements = new ArrayList<Class>();

	// Variables de clase
	private List<DataClazzField> fields = new ArrayList<DataClazzField>();
	private List<DataMethod> methods = new ArrayList<DataMethod>();

	// Modficadores
	private int modifiers;

	private boolean isFinal;
	private boolean isAbstract;
	private boolean isStrictfp;
	private boolean isEnum;
	private boolean isInterface;

	// Modificadores de visibilidad
	private int visibility;

	public void addMethod(DataMethod method) {
		this.methods.add(method);
	}

	public void addField(DataClazzField field) {
		this.fields.add(field);
	}

	public void addClazzImplement(Class clazzImplement) {
		this.clazzImplements.add(clazzImplement);
	}

	/**
	 * @return the clazzPackage
	 */
	public String getClazzPackage() {
		return clazzPackage;
	}

	/**
	 * @param clazzPackage
	 *            the clazzPackage to set
	 */
	public void setClazzPackage(String clazzPackage) {
		this.clazzPackage = clazzPackage;
	}

	/**
	 * @return the clazzName
	 */
	public String getClazzName() {
		return clazzName;
	}

	/**
	 * @param clazzName
	 *            the clazzName to set
	 */
	public void setClazzName(String clazzName) {
		this.clazzName = clazzName;
	}

	/**
	 * @return the clazzExtend
	 */
	public Class getClazzExtend() {
		return clazzExtend;
	}

	/**
	 * @param clazzExtend
	 *            the clazzExtend to set
	 */
	public void setClazzExtend(Class clazzExtend) {
		this.clazzExtend = clazzExtend;
	}

	/**
	 * @return the clazzImplements
	 */
	public List<Class> getClazzImplements() {
		return clazzImplements;
	}

	/**
	 * @param clazzImplements
	 *            the clazzImplements to set
	 */
	public void setClazzImplements(List<Class> clazzImplements) {
		this.clazzImplements = clazzImplements;
	}

	/**
	 * @return the fields
	 */
	public List<DataClazzField> getFields() {
		return fields;
	}

	/**
	 * @param fields
	 *            the fields to set
	 */
	public void setFields(List<DataClazzField> fields) {
		this.fields = fields;
	}

	/**
	 * @return the methods
	 */
	public List<DataMethod> getMethods() {
		return methods;
	}

	/**
	 * @param methods
	 *            the methods to set
	 */
	public void setMethods(List<DataMethod> methods) {
		this.methods = methods;
	}

	/**
	 * @return the isFinal
	 */
	public boolean isFinal() {
		return isFinal;
	}

	/**
	 * @param isFinal
	 *            the isFinal to set
	 */
	public void setFinal(boolean isFinal) {
		this.isFinal = isFinal;
	}

	/**
	 * @return the isAbstract
	 */
	public boolean isAbstract() {
		return isAbstract;
	}

	/**
	 * @param isAbstract
	 *            the isAbstract to set
	 */
	public void setAbstract(boolean isAbstract) {
		this.isAbstract = isAbstract;
	}

	/**
	 * @return the isEnum
	 */
	public boolean isEnum() {
		return isEnum;
	}

	/**
	 * @param isEnum the isEnum to set
	 */
	public void setEnum(boolean isEnum) {
		this.isEnum = isEnum;
	}

	/**
	 * @return the isInterface
	 */
	public boolean isInterface() {
		return isInterface;
	}

	/**
	 * @param isInterface
	 *            the isInterface to set
	 */
	public void setInterface(boolean isInterface) {
		this.isInterface = isInterface;
	}

	/**
	 * @return the isStrictfp
	 */
	public boolean isStrictfp() {
		return isStrictfp;
	}

	/**
	 * @param isStrictfp
	 *            the isStrictfp to set
	 */
	public void setStrictfp(boolean isStrictfp) {
		this.isStrictfp = isStrictfp;
	}

	/**
	 * @return the visibility
	 */
	public int getVisibility() {
		return visibility;
	}

	/**
	 * @param visibility
	 *            the visibility to set
	 */
	public void setVisibility(int visibility) {
		this.visibility = visibility;
	}

	/**
	 * @return the modifiers
	 */
	public int getModifiers() {
		return modifiers;
	}

	/**
	 * @param modifiers
	 *            the modifiers to set
	 */
	public void setModifiers(int modifiers) {
		this.modifiers = modifiers;
	}

	/**
	 * @return the clazzRepository
	 */
	public DataSCM getClazzRepository() {
		return clazzRepository;
	}

	/**
	 * @param clazzRepository
	 *            the clazzRepository to set
	 */
	public void setClazzRepository(DataSCM clazzRepository) {
		this.clazzRepository = clazzRepository;
	}

	/**
	 * @return the clazzProject
	 */
	public DataProject getClazzProject() {
		return clazzProject;
	}

	/**
	 * @param clazzProject the clazzProject to set
	 */
	public void setClazzProject(DataProject clazzProject) {
		this.clazzProject = clazzProject;
	}

	/**
	 * @return the sourcePath
	 */
	public String getSourcePath() {
		return sourcePath;
	}

	/**
	 * @param sourcePath the sourcePath to set
	 */
	public void setSourcePath(String sourcePath) {
		this.sourcePath = sourcePath;
	}
}